Add Chrome memory leak mitigation with configurable periodic restarts#15
Closed
Add Chrome memory leak mitigation with configurable periodic restarts#15
Conversation
Co-authored-by: Zozman <1192364+Zozman@users.noreply.github.com>
…ervals Co-authored-by: Zozman <1192364+Zozman@users.noreply.github.com>
Co-authored-by: Zozman <1192364+Zozman@users.noreply.github.com>
Co-authored-by: Zozman <1192364+Zozman@users.noreply.github.com>
Copilot
AI
changed the title
[WIP] The chrome session spawned by the container has a memory leak whose severity varies depending on the webpage loaded. Add functionality to mitigate this so chrome does not increase memory consumption out of control.
Add Chrome memory leak mitigation with configurable periodic restarts
Aug 21, 2025
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
Chrome sessions spawned by the container were experiencing memory leaks whose severity varied depending on the webpage loaded. Over long streaming sessions, this could lead to out-of-control memory consumption, potentially causing system instability or forcing container restarts.
Solution
This PR implements a comprehensive two-pronged approach to Chrome memory management:
1. Memory-Limiting Chrome Flags
Added several Chrome flags to reduce baseline memory consumption:
--memory-pressure-off- Disables memory pressure signals--max_old_space_size=2048- Limits V8 JavaScript heap to 2GB--disable-background-timer-throttling- Prevents background process throttling--disable-renderer-backgrounding- Keeps renderer processes active for streaming--aggressive-cache-discard- More aggressive cache cleanup2. Periodic Chrome Restart System
Implemented a configurable Chrome restart mechanism that:
CHROME_RESTART_INTERVALenvironment variable (default: 60 minutes)Key Features
Usage
Testing
Files Changed
cmd/main.go- Core implementation of memory management featurescmd/main_test.go- New test cases for configuration validation.env.example- Added documentation for new environment variableREADME.md- Updated documentation with new environment variable detailsThis implementation provides a robust solution to Chrome memory leaks while maintaining the application's reliability and ease of use.
Warning
Firewall rules blocked me from connecting to one or more addresses (expand for details)
I tried to connect to the following addresses, but was blocked by firewall rules:
id.twitch.tv/tmp/go-build790772277/b343/twitch.test -test.testlogfile=/tmp/go-build790772277/b343/testlog.txt -test.paniconexit0 -test.timeout=10m0s -test.v=true(dns block)/tmp/go-build551122322/b343/twitch.test -test.testlogfile=/tmp/go-build551122322/b343/testlog.txt -test.paniconexit0 -test.timeout=10m0s -test.v=true(dns block)If you need me to access, download, or install something from one of these locations, you can either:
✨ Let Copilot coding agent set things up for you — coding agent works faster and does higher quality work when set up for your repo.